// 这个文件是为了对axios的二次封装
//目的是为了让整个项目发送Ajax请求时，通用的配置不用一遍一遍的重复编写

// 1.在这里引入axios模块
import axios from "axios";
import "nprogress/nprogress.css";
import NProgress from "nprogress";
import store from "@/store";
import { getUserTempId } from "@/utils/getUserTempId";
// 2。创建axios实例,以后整个项目都用这个实例发送请求
const ajax = axios.create({
  // target: 'http://sph-h5-api.atguigu.cn',//这个是目标地址
  baseURL: "/api", //发送请求时的基础路径
  timeout: 5000, //设置超时时间
});

// 3.设置请求拦截器，当发送请求的时候就会触发
ajax.interceptors.request.use((config) => {
  NProgress.start(); // 启用进度条

  //在请求头中添加token
  const token = store.state.user.userInfo.token;
  config.headers.token = token;
  // 统一添加请求头
  config.headers.userTempId = getUserTempId();
  return config;
});

// 4.设置响应拦截器,请求响应回来后会触发
ajax.interceptors.response.use(
  (response) => {
    NProgress.done(); // 结束进度条
    console.log("请求成功");
    return response.data;
  },

  (error) => {
    NProgress.done(); // 结束进度条
    // 如果请求发送错误就会在这里提示错误信息
    // return error.message 如果只写这个是错误的，因为错误信息是字符串的话是非Promise值,也会认为是成功
    //所以失败的话要返回一个promise实例，目的是为了让程序走自己设置的错误信息
    console.log("请求失败", error);
    return Promise.reject(new Error(error.message));
  }
);
// 5. 导出对象
export default ajax;
